var express = require('express')
var router = express.Router()

// 导入用户集合的字段的数据模型、导入生成token的模块
var goodsModel = require('../model/goods/GoodsModel')
var catesModel = require('../model/goods/CatesModel')
var http = require('../utils/http')
var jwt = require('../utils/jwt')


/**
 * 描述：获取商品列表的api
 * 请求地址：/list
 * 请求方式：get
 * 请求参数：page(页面)、size(商品量), hot(热销), min_price, max_price
 * cate(品类), rank(排名量), star(访问量), name(商品名)
 * 响应参数：total(总用户量)、list(用户列表)
*/
router.get('/list', (req, res) => {
  let { name, page, size, hot, star, rank, cate, min_price, max_price } = req.query
	
  name = name || ''
  page = parseInt(page || 1)
  size = parseInt(size || 5)
  hot = hot || false
  star = parseInt(star || 0)
  rank = parseInt(rank || 0)
  cate = cate || ''
  min_price = Number(min_price || 0)
  max_price = Number(max_price || Infinity)

  // 根据用户的需要选项对商品进行筛选
  const params = {
    // hot,
    cate,
    goods_name: new RegExp(name),
    // price: { $gte: min_price, $lte: max_price }
  }
  if (params.goods_name === '') delete params.goods_name
  if (params.cate === '') delete params.cate

  // 排序规则，先是按照销量(rank)再根据浏览量(star)进行排序
  const sort = {
    rank,
    star
  }
  if (!sort.rank) delete sort.rank
  if (!sort.star) delete sort.star

  goodsModel.find(params).count().then(total => {
    goodsModel.find(params, 
      { _id: 1, goods_name: 1, img: 1, desc: 1, price: 1, cate: 1, hot: 1, count: 1, rank: 1}
    )
    .skip((page - 1) * size)
    .limit(size)
    .sort(sort)
    .then(list => {
      res.json({ err: 0, msg: 'success', data: { list, total } })
    })
  })
})

/**
 * 描述：根据商品_id 来查询对应的详情商品
 * 请求地址：/details
 * 请求方式：get
 * 请求参数：_id
*/
router.get('/details', (req, res) => {
  let { id } = req.query
  if (!id) return res.json({ err: 1, msg: '缺少商品id' })
  // 根据商品(_id)来查询相应的详情信息
  goodsModel.findById(id).then(data => {
    res.json({ err: 0, msg: 'success', data })
  })
})

/**
 * 描述：获取商品的列表
 * 请求地址：/cates
 * 请求方式：get
 * 请求参数：{}
*/
router.get('/cates', (req, res) => {
  catesModel.find().then(data => {
    res.json({ err: 0, msg: 'success', data })
  })
})

/**
 * 描述：根据商品的id在数据库中删除
 * 请求地址：/del
 * 请求方式：get
 * 请求参数：goods_id
*/
router.get('/del', (req, res) => {
  jwt.verifyToken(req, res).then(() => {
    let { _id } = req.query
    console.log( _id )
    goodsModel.deleteOne({_id: Object(_id)}).then(() => {
      res.json({ err: 0, msg: 'success' })
    })
  })
})

/**
 * 描述：新增商品和编辑商品
 * 请求地址：/addOrEdit
 * 请求方式：post
 * 请求参数：id, goods_name, img, desc, price, count, cate, hot
*/
router.post('/addOrEdit', (req, res) => {
  jwt.verifyToken(req, res).then(() => {
    let { id, goods_name, img, desc, price, count, cate, hot } = req.body
    let data = {
      goods_name,
      img,
      desc,
      price,
      count,
      cate,
      hot,
    }

    // 如果传递的值有id，那么进行的操作就是编辑商品，如果没有，那就是新增商品
    if (id) {
      goodsModel.updateOne({_id: id}, {$set: data}).then(val => {
        res.json({ err: 0, msg: 'success', data: {val} })
      })
    } else {
      goodsModel.insertMany([data]).then(() => {
        res.json({ err: 0, msg: 'success', data: {data} })
      })
    }
  })
})

module.exports = router
